/* 875. 爱吃香蕉的珂珂 */
/* https://leetcode.cn/problems/koko-eating-bananas/submissions/564074456/ */
/* /* 难度：中等 时间10/9 */
/* 二分搜索 */ * /
    代码： class Solution
{
public:
    int minEatingSpeed(vector<int> &piles, int h)
    {
        auto check = [&](int k) -> bool
        {
            int sum = 0;
            for (int p : piles)
            {
                sum += (p + k - 1) / k;
                if (sum > h)
                {
                    return false;
                }
            }
            return true;
        };
        // 定义二分查找左右边界
        int l = 1;
        int r = 0;
        for (int pile : piles)
        {
            r = max(r, pile);
        }

        while (l < r)
        {
            int mid = l + (r - l) / 2;
            if (check(mid))
            {
                r = mid; // 如果在 mid 速度下可以吃完，则尝试更小的速度
            }
            else
            {
                l = mid + 1; // 如果在 mid 速度下不能吃完，则尝试更大的速度
            }
        }
        return l; // 当 l 和 r 相等时，这就是最小的速度
    }
};